# -*- coding:utf-8 -*-
# @Desc : 
# @Author : Administrator
# @Date : 2019-07-05 13:16

class Cat:
    """ 这个类的文档"""
    def __init__(self,new_name):
        print("这是对象的初始化方法")
        # self.name = "Tom"  # 在初始化的时候给对象设置一个属性并赋值
        self.name = new_name

    def eat(self):
        print("%s 爱吃鱼"%self.name)

    def __del__(self):
        print("%s去了!!!"% self.name)

    def __str__(self):
        # 必须返回一个字符串
        return "我的小猫[%s]"% self.name

# 使用类名()创建对象的时候,会自动调用初始化方法__init__()
tom = Cat("Tom")
print(tom)
# 这是对象的初始化方法
# 我的小猫[Tom]
# Tom 去了!!!


### 魔法方法: 内置对象方法
## 初始化方法: __init__(self [,形参列表])
# 说明:
# 1. 初始化方法名必须为__init__ 不可改变
# 2. 初始化方法会在构造函数创建实例后自动调用,且将实例自身通过第一个参数self传入__init__方法
# 3. 构造函数的实参将通过__init__方法的形参列表传入 __init__ 方法中
# 4. 初始化方法内部如果需要返回则只能返回None


## __new__(self):  负责对象的创建

## __init__(self):  负责对象的初始化

## __del__(self):  析构方法,当对象在内存中被释放时,自动触发执行

## __str__(self):  可打印的字符串输出

## __iter__(self):  迭代器类,结合使用,返回对象本身
## __next__(self):  迭代器类,结合使用,返回具体结果

## __call__(self):  装饰器类,把这个类型的对象当作函数来使用,对象后面加括号,触发执行


### 魔法属性: 内置对象属性
## 普通内置属性: mro()
# 作用: 获取类继承顺序,返回一个列表; 如 类名.mro()

## 普通内置属性: dir()
# 作用: 查看对象的属性和方法,返回的是一个列表; 如 dir(对象)

## 魔法属性: __doc__
# 作用: 查看类的描述信息; 如 对象.__doc__ 或 类名.__doc__

## 魔法属性: __dict__
# 作用: 查看对象的属性信息,返回一个字典;
# 如 对象.__dict__ 返回对象的所有属性信息
# 如 类名.__dict__ 返回类定义的所有类属性和类方法

## 魔法属性: __class__
# 作用: 获取当前对象所属的类; 如 对象.__class__

## 魔法属性: __module__
# 作用: 查看当前操作的对象(类)所在模块,当值为"__main__"则为主程序,否则为类属于的模块名字;
# 如 对象.__module__ 或 类名.__module__

## 魔法属性: __mro__
# 作用: 获取类继承顺序,返回一个列表; 如 类名.__mro__

## 魔法属性: __bases__
# 作用: 查看类的父类,返回一个元组; 如 类名.__bases__


